Method and system for sharing and discovery

ABSTRACT

A method for sharing media within a chat room system, including: providing a virtual chat room that is accessible by a first user device and a second user device, receiving, from the first user device, a first media item generated by an application executed on the user device to share within the chat room, sending the first media item for distribution to the second user device via the virtual chat room, receiving a second media item from the second user device for provision in the virtual chat room, and sending the second media item for distribution to the first user device via the virtual chat room.

PRIORITY

This application is a continuation under 35 U.S.C. § 120 of U.S. patentapplication Ser. No. 15/694,038, filed 1 Sep. 2017, which is acontinuation of U.S. patent application Ser. No. 14/134,240, filed 19Dec. 2013, which claims the benefit under 35 U.S.C. § 119(e) of U.S.Provisional Patent Application No. 61/739,544, filed 19 Dec. 2012, andU.S. Provisional Patent Application No. 61/777,275, filed 12 Mar. 2013,each of which is incorporated herein by reference in their entireties.

TECHNICAL FIELD

This invention relates generally to the social media field, and morespecifically to a new and useful chat room system in the social mediafield.

BACKGROUND

Conventional chat rooms prohibit users from discovering new users andcontent that is being shared within simultaneously occurringconversations. This is due to the insular nature of conventional chatrooms—each conventional chat room only supports a single conversation,and users within the chat room are unable to simultaneously participatein multiple conversations without actively entering separate, insularchat rooms. Without notification of the user to the existence of theseother conversations, users are not even aware that there are otherconversations that can be joined. Past attempts at resolving thisdiscovery issue have been made, but these solutions are inadequatebecause users cannot control which conversations they are joining, andtherefore do not have control over which new users or what new contentthey will be consuming.

Thus, there is a need in the social media field to create a new anduseful chat room system and method.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a schematic representation of a method for facilitating userand content discovery.

FIG. 2 is a specific example of audio parameter setting determinationbased on the chat group priority.

FIG. 3 is a schematic representation of an example of virtual chat grouppositions within a virtual chat room.

FIG. 4 is a schematic representation of an example of the chat groupvideo stream displayed corresponding to the virtual chat group positionsof FIG. 3.

FIG. 5 is a schematic representation of a variation of simultaneouslypresenting the audio streams of a plurality of chat groups.

FIG. 6 is a schematic representation of a variation of simultaneouslypresenting the video streams of a plurality of chat groups.

FIG. 7 is a schematic representation of a variation of processing theaudio streams.

FIG. 8 is a schematic representation of a variation of chat grouppresentation setting adjustment in response to a transient userselection of a chat group.

FIG. 9 is a schematic representation of a variation of chat grouppresentation setting adjustment in response to an explicit userselection of a chat group.

FIG. 10 is a schematic representation of the method of audio sharing.

FIG. 11 is a schematic representation of a variation of the method ofaudio sharing including capturing audio input.

FIG. 12 is a schematic representation of a variation of the method ofaudio sharing including substantially immediate playback of the systemaudio stream at the originating device.

FIG. 13 is a schematic representation of a variation of the method ofaudio sharing including delayed playback of the system audio stream atthe originating device.

DESCRIPTION OF EXAMPLE EMBODIMENTS

The following description of the preferred embodiments of the inventionis not intended to limit the invention to these preferred embodiments,but rather to enable any person skilled in the art to make and use thisinvention.

As shown in FIG. 1, the method for facilitating user and contentdiscovery within a chat room includes determining a presentation settingfor each of a set of chat groups S100 and simultaneously presenting theaudio and video streams for each of the set of chat groups based on thepresentation settings S200. The method can additionally includeadjusting a chat group priority in response to a user action S300. Themethod functions to facilitate discovery of new users and new contentwithin a chat room environment by enabling a user to simultaneouslyparticipate in multiple conversations. User participation in aconversation preferably includes listening to and/or watching aconversation, and can additionally include contributing audio and/orvideo to the conversation.

The method is preferably performed by one or more user devices 10connected to one or more servers 20. The user device 10 is preferably aportable device, such as a smartphone, laptop, tablet, or any othersuitable portable user device. Alternatively, the user device 10 can bea desktop or any other suitable computing device. The device 10preferably includes an audio output 12, more preferably an audio devicesuch as a speaker, but can alternatively include audio out jacks or anyother suitable audio output. The device 10 preferably includes aprocessor, wherein the primary and routing modules are preferablylocated on the processor, such that the processor performs the actionsof the primary and/or routing modules. Alternatively, the device 10 caninclude multiple processors or multiple threads, wherein the functionsof the primary module and routing module can be performed by separateprocessors or separate threads. The device 10 can additionally includean audio input, such as a microphone, audio in jack, or any othersuitable audio input. The device 10 can additionally include a display14. The device 10 can additionally include a communication connection,such as a wireless receiver and transmitter, that functions to transferand receive audio and/or video data to a receiver and transmitter pairlinked to a server. However, the device 10 can alternatively include anyother suitable component. The originating device and receiving devicespreferably include substantially the same components described above,but can alternatively include different combinations of components.

The server 20 preferably includes a CPU and storage. The server ispreferably external and separate from the user device, but canalternatively be a second user device (e.g., in a distributed network).The server 20 preferably stores and tracks the properties of each of aplurality of chat rooms within a chat system, and can additionally storeand track the properties of each of a plurality of chat groups withineach chat room. The server 20 can additionally receive the audio andvideo of each participating user from the respective user device(originating devices), and send the audio and video to the devices ofthe other users participating in the chat group (receiving devices). Theserver 20 can additionally synchronize the audio and video.Alternatively, the user device 10 can synchronize the audio and video.Alternatively, the receiving device can directly receive the audio andvideo from the originating devices. The user device 10 is preferablyconnected to the server 20 wirelessly (e.g., through WiFi, a cellularnetwork, etc.), but can alternatively be connected to the server 20through a wired connection.

The method is preferably facilitated by a primary native applicationthat is executed by the user device, gathers the requisite data from theuser device, and facilitates interaction with the server. The primarynative application is preferably an executable that runs on the userdevice without external support, but can alternatively be a browserapplication, a browser plugin, a web-based system, a mobile application,or any other suitable software or data format that is supported by theuser device system with minimal computational overhead or additionalcomponents. The primary native application is preferably capable ofaccessing the data of other native applications through the respectiveapplication programming interfaces, and is preferably capable ofaccessing lower-level computational data, such as processor-level data.However, the method can be facilitated by a non-native application, suchas a browser plug-in, a browser displaying the mixed audio and videoreceived from an external server, or by any other suitable means. Theuser profile, user history, social network connections, and any othersuitable user information is preferably stored by the user device (e.g.,native application), but can alternatively be stored by the server inassociation with a user account identifier.

In use, the chat system preferably presents one or more chat rooms 30 toa user on the user device 10. In response to receipt of a chat roomselection, a set of chat groups 40 of the chat room are preferablydisplayed, wherein the audio and video streams of the chat groups arepreferably presented to varying degrees. The displayed set of chatgroups 40 are preferably a subset of the plurality of chat room chatgroups (e.g., wherein the subset is smaller than the plurality), but canalternatively be all chat groups or any other suitable portion of theplurality. In response to receipt of a chat group selection, the audiostreams 52 and video streams 54 of the users participating in the chatgroup are preferably presented at the user device, while the audio andvideo streams of secondary chat groups (e.g., unselected chat groups)are presented to varying degrees on the user device. More preferably,the user device preferably concurrently displays the participant videostreams 54 of the users participating in the selected chat group 50, thechat group video stream 44 of the selected chat group, and the chatgroup video streams 44 of secondary chat groups, and concurrently playsthe audio streams 52 of the users participating in the selected chatgroup and the dampened audio streams of all the chat room chat groups.However, the audio and video of the chat room chat groups can beotherwise concurrently presented.

As shown in FIG. 3, the chat room of the method is preferably a virtualchat room (e.g., digital chat room), wherein each chat room includes oneor more chat groups (e.g., virtual or digital chat groups). The chatroom is preferably one of many chat rooms supported by a chat roomsystem, wherein the system is preferably capable of storing and managingan unlimited number of chat rooms, but can alternatively store andmanage a limited number of chat rooms. The chat rooms are preferablysubstantially insular, such that users inside a chat room are notsimultaneously participating in other chat rooms. For example, a user ina first chat group within a first chat room can hear and/or see audioand video streams of other users within other chat groups in the firstchat room, but cannot hear or see the audio and video streams of usersin other chat rooms. However, users outside of a chat room arepreferably capable of participating in the chat room, wherein theoutside users are preferably capable of listening to an associated audiostream and an associated video stream. Each chat room is preferablycapable of supporting any suitable number of users, but canalternatively support a limited number of users. The chat rooms arepreferably substantially persistent within the system, but canalternatively be transient and be deleted in response to a terminationevent (e.g., no users are in the chat room, the chat room creator hasleft the chat room, etc.).

Each chat room preferably includes associated permissions settings andpresentation settings. The permissions settings can include accesssettings (e.g., which users can access the chat room, such as private orprivate chat rooms, etc.), content sharing settings (e.g., which userscan share content in the chat room), or any other suitable permissionssettings. The permissions settings are preferably set by the creator ofthe chat room, but can alternatively be set by default when the chatroom is created. The permissions settings are preferably managed orchanged by the creator or moderator of the chat room, but canalternatively be managed or changed automatically by the server or byanother user. The permissions settings are preferably stored by theserver, but can alternatively be stored on the device by the primarynative application.

The presentation settings for the chat rooms are preferably determinedin a similar manner to presentation setting determination for the chatgroup, as described below. However, the presentation settings can bedetermined based on the priorities of the chat groups within the chatroom or determined in any other suitable manner. The presentationsettings are preferably used to determine the aural and visualproperties of chat room presentation to the user, prior to chat roomselection. Chat room presentation parameters can include arepresentative audio stream selection, a representative video streamselection, the size of the displayed video stream relative to other chatrooms, the volume of the audio stream, the discernibility of the audiostream, the virtual position of the chat room on the user display, orany other suitable presentation settings. The representative videostream is preferably the video stream of the chat group having thehighest priority to the user within the respective chat room, but canalternatively be a randomly selected video stream, include multipleconcurrent video streams, or be any other suitable video stream. Therepresentative video stream can be from a singular chat group or can bea compilation from multiple chat groups. The representative audio streamis preferably the audio stream corresponding to the selected videostream, but can alternatively be a compilation of a subset or all of theaudio streams from the chat room. The chat room presentation settingscan additionally influence how the audio and video of the chat groupsare displayed once the user is within the chat room.

A chat group of the chat room preferably includes one or more usershaving a conversation. Each user is represented within the chat group bya video stream and audio stream received from a user device of the user(participant video stream and participant audio stream, respectively),but can alternatively be represented by a user account or any othersuitable representation. The video stream preferably includes asubstantially continuous stream of video frames, and the audio streampreferably includes a substantially continuous stream of audio frames.Each audio and video frame is preferably associated with (e.g., encodedwith) a timestamp (e.g., the time at which the video frame was generatedat the user device or the timestamp of the video frame within a piece ofmedia). Each audio and video frame or stream can additionally oralternatively be associated with a geotag, the originating useridentifier, a sentiment tag, a content or keyword tag, or any othersuitable metadata. The audio and/or video metadata can be used todetermine a chat group relevance to a user, searched to select for astream of a specific user, or utilized in any other suitable manner. Theaudio and/or video streams can be tagged by the originating device, bythe server, by the receiving device, or by any other suitable componentof the system.

A chat group is preferably represented within a chat room by a chatgroup audio stream and a chat group video stream. A conversationpreferably includes the sharing of audio streams, and can additionallyinclude the sharing of video streams or any other suitable contentbetween the users within the conversation. The chat groups of the chatrooms are preferably substantially inclusive, wherein all users within achat room are preferably capable of simultaneously participating in allchat groups of the chat room. More preferably, all users within a chatroom are simultaneously participating in all chat groups to varyingdegrees. The degree of participation of a user in a chat group ispreferably determined based on the priority of the chat group for theuser, but can alternatively be automatically determined or based on auser selection or on any other suitable parameter. In one variation ofthe method, the degree of participation preferably varies proportionallywith the chat group priority, wherein the degree of participation ishigh for a chat group with high priority, and low for a chat group withlow priority. A high degree of participation for a user preferablyincludes the user device playing a discernable audio stream of eachparticipant within the chat group (e.g., the user audio streams havebeen processed to increase discernibility) and displaying the videostream of each user within the chat group, and wherein the audio streamand video stream associated with the user is continuously displayed tousers of the chat group. A medium degree of participation for a userpreferably includes the user device playing an audio streamrepresentative of the chat group (e.g., the audio streams of the primaryspeaker or the audio stream of shared content) and displaying a videostream representative of the chat group (e.g., the video stream of theprimary speaker or the video stream of the shared content), wherein thevideo stream of the user preferably is not continuously displayed to theusers within the chat group. A medium degree of participation canalternatively and/or additionally include muffling, decreasing thevolume, or otherwise processing the representative audio stream of thechat group to decrease discernibility. A low degree of participation fora user preferably includes the user device playing a substantiallymuffled or processed audio stream of the chat group, and does notinclude the user device displaying video associated with the chat groupor include consistent display of user video with users of the chatgroup.

In another variation of the method, the user is capable of participatingin a chat group in at least an active participation mode and a passiveparticipation mode. When the user participates in the chat group in theactive participation mode (e.g., a high degree of participation), theaudio and/or video stream from the associated user device is preferablysent to the devices of the other chat group participants. When the userparticipates in the passive participation mode (e.g., a low or mediumdegree of participation), the audio and/or video stream from theassociated user device is preferably not sent to the chat groupparticipant devices. However, the user participant can alternatively beoperable in any other suitable mode.

Determining the presentation settings for each chat group S100 functionsto determine the contribution of each chat group to the audio output atthe user device and to determine the display properties of the videostream(s) associated with each chat group. Determining the presentationsettings can additionally function to determine a virtual chat groupposition within a virtual chat room space. The presentation settings foreach chat group are preferably specific to each user, but canalternatively the same for all users or for a group of users.Determining the presentation settings preferably includes determiningthe presentation settings for every chat group within the chat room forthe user, but can alternatively include determining the presentationsettings for a sub set of chat groups within the chat room for the user.The presentation settings of each chat group are preferably determinedfor each new user and stored at the server or at the native device, butcan alternatively be newly determined each time the user accesses thechat room.

The presentation settings are preferably used to determine the targetpresentation parameter values for each chat group. Presentationparameters preferably include audio parameters and video parameters.Audio parameters include an audio stream selection, the volume of anaudio stream, and the discernibility of the audio stream (or conversely,the degree of audio stream dampening, muffling, or reduction inintelligibility). Video parameters include a video stream selection, thesize of the displayed video stream, and the number of participant videostreams displayed. However, any other suitable audio and videoparameters can be determined. The presentation parameters canadditionally include a virtual chat group position of the chat grouprelative to a virtual reference point (e.g., the virtual user location).The chat group video is preferably displayed at a position on the userdevice corresponding to the respective virtual position, and the audiois preferably encoded or mixed to have an aural position correspondingto the virtual position. However, any other suitable presentationparameter can be determined by the presentation settings.

The presentation settings of each chat group for each user arepreferably determined by the primary native application, but canalternatively be determined by the server or by the user. Thepresentation settings are preferably stored and controlled by theserver, but can alternatively be managed by the primary nativeapplication. The server preferably sets the presentation settings foreach chat group based on the respective priorities, and displays eachchat group according the presentation settings. The server canadditionally control the priority of the chat group for each user.However, the primary native application or any other suitable componentcan alternatively control the aforementioned parameters. The primarynative application or server can additionally adjust the chat grouppresentation settings in response to a user action. The primary nativeapplication or server can additionally map the chat groups to virtuallocations within the chat group.

Determining the presentation settings for each chat group preferablyincludes determining a priority for each chat group for the user andsetting the presentation settings for each chat group based on therespective priority. However, determining the presentation settings foreach chat group can alternatively include setting the presentationsetting to a default setting, setting the presentation settings based onuser preferences, setting the presentation settings in accordance withpresentation settings received from the user, or determining thepresentation settings in any other suitable manner.

Determining the priority of each chat group for the user preferablyfunctions to determine the degree of user interest in the chat group.The chat group priorities can be calculated through scores, rankingassigned on a continuous scale, tiers (e.g., high, medium, and lowpriority), or any other suitable priority setting. The chat grouppriorities are preferably determined from user actions performed withinthe instantaneous session, but can additionally and/or alternatively bedetermined from a priority selection received from a user, thesimilarity between the chat group and a user profile associated with theuser, the degree of chat group association with one or more user socialnetwork connections, historical user actions with the chat group orrelated chat groups from past sessions, the presence of shared mediawithin the chat group (e.g., as determined based on the source of theaudio or video, wherein chat groups having video captured from an APIcan have higher priority than chat groups with only video from thenative camera), the type of media shared within the chat group (e.g.,chat groups sharing movies can have higher priorities than chat groupssharing images), the geographic proximity of the audio and video streamto a given physical location (e.g., based on the associated geotags), orfrom any other suitable user parameter. The chat group priority canalternatively or additionally be determined based on user preferences,based on the user profile, based on similarities between the chat groupcontent and the user interests, a historical relationship between thechat group and the user (e.g., the user had previously visited the chatgroup), a relationship between the users in the chat group and the user(e.g., a social network connection of the user, as determined from asocial networking service, is in the chat group), or based on any othersuitable parameter. The user profile is preferably extracted fromhistorical user actions (e.g., include themes or keywords associatedwith the chat groups that the user has previously participated in), butcan alternatively be a profile received from the user (e.g., a profileinput by the user), a profile from a third party system (e.g., from asocial networking system), or any other suitable user profile.

In one variation of the method, chat groups that the user has explicitlyselected (e.g., clicked on with a mouse), or otherwise indicatedexplicit interest in, preferably have the highest priority. Chat groupsin which the user has indicated a passing interest (e.g., the usermoused over the chat group video or otherwise transiently selected thechat group) preferably have the second highest priority. Chat groupsthat are associated with the user, such as those with which the user hasinteracted in the past, or those that the user could be interested in,preferably have the third highest priority. Chat groups that are withinthe same chat room, but have not received user action, can have a fourthhighest priority. Chat groups can additionally or alternatively beprioritized based on the relevance to the user. For example, chat groupshaving participants that have low degrees of separation from the user(e.g., along a social graph) can be prioritized higher than chat groupswith participants having a high degree of separation from the user. Inanother example, within a chat group, other participants having lowdegrees of separation from the user can be prioritized higher thanparticipants having high degrees of separation from the user (e.g., whenthe user is participating in a chat group with a large number of users,such as a chat group having more than 50 participants).

The chat groups of a chat room are presented according to the respectivepriorities in response to a user selection of the chat room, wherein thechat groups displayed on the user device have at least a medium priorityand chat groups not displayed on the user device have a low priority. Inresponse to a user selection of a first chat group, the chat grouppriority of the first chat group increases beyond a first threshold andis categorized as a high priority group. The remainder of the chatgroups can retain the previous respective chat group priorities, or therespective chat group priorities can be adjusted based on the propertiesof the selected chat group. For example, chat groups related to thefirst chat group can increase in priority whereas chat groups unrelatedto the first chat group can decrease in priority.

Alternatively, the chat group priority can be assigned based ondetermined user preferences. User preferences are preferably determinedfrom the themes, keywords, users, or any other suitable parameter ofprevious actions by the user, wherein chat groups with similar or sharedparameters are preferably prioritized higher than chat groups withweaker associations. The user preferences can additionally be predictedbased on prior actions through statistical analysis of user activity,correlation of users to persona descriptors (e.g., an abstract userconstruct used to summarize a group of users), or through any othersuitable means of predicting or determining user preferences. Thestrength of chat group association with the user preferably determinesthe relative priority of the aforementioned groups. The strength of chatgroup association with the user is preferably proportional to thefrequency of past user actions associated with the chat group (e.g.,past participation in the group), strength of parameter associationswith the user profile (e.g., degree of similarity between keywordsextracted from the chat group conversation and keywords within the userprofile, etc.), strength of network connection with the user (e.g., afirst degree social network connection, based on a social networkingservice such as Facebook, is in the chat group), or degree ofassociation of any other suitable user parameter, but can alternativelybe inversely proportional, weighted, or otherwise determined. Chatgroups that are unassociated with the user preferably have the lowestpriority.

The chat group priority can alternatively be determined based on thevirtual position of the chat group relative to a virtual user position 6o (e.g., virtual reference position) within the chat room. In thisvariation, the method preferably additionally includes mapping the chatgroups to virtual positions within a virtual space (e.g., the virtualchat room) and determining the chat group priority for each of the chatgroups based on the distance between the virtual position of the chatgroup and a virtual position of the user (e.g., virtual referencepoint). The virtual chat group positions can be randomly determined,pre-set, set by secondary users, or otherwise determined. The virtualposition of the user can be constant within the space (e.g., wherein thevirtual space adjusts about the user) or can move within the space. Theinitial virtual position of the user when the user first enters the chatroom is preferably set at a predetermined virtual position, but canalternatively be randomly generated. The user is preferably consideredan active participant in a chat group when the virtual user positioncoincides with the chat group position. However, the chat group prioritycan be otherwise determined based on the respective virtual chat groupposition. Alternatively, the chat groups can be mapped to virtualpositions within the virtual space based on the respective chat grouppriority. For example, the chat groups can be mapped such that thedistance between the chat group and the virtual reference positionvaries inversely with the chat group priority (e.g., higher prioritychat groups are closer to the virtual reference position and lowerpriority chat groups are further from the virtual reference position).However, the chat groups can be mapped such that the distance betweenthe chat group and the virtual position varies directly with chat grouppriority, such that chat groups of a given priority are groupedtogether, or mapped within the virtual space in any other suitableconfiguration based on the respective chat group priority. The chatgroup priority can be otherwise determined using a combination of theaforementioned methods or determined in any other suitable manner.

Determining the presentation settings for a chat group based on therespective chat group priority preferably includes selecting thepresentation settings for each of the priorities. Different settings arepreferably determined for different priority levels, but the settingscan alternatively vary along a substantially continuous continuum for acontinuum of priorities. Different priority tiers are preferablyassociated with a different set of presentation settings. The parametervalues for each priority tier are preferably automatically determined bythe system (e.g., based on predetermined values, automaticallycalculated, etc.), but can alternatively be based on values receivedfrom the user, values determined from user preferences (e.g., fromhistorical user actions), or otherwise determined. Alternatively, theparameter values for each priority tier can be calculated or otherwisedetermined based on the chat group priority.

In one variation of the method, the priorities are preferably dividedinto a high, medium, and low priority tier using a first and a secondthreshold, wherein each tier has a respective set of presentationsettings. For example, chat groups having priorities above a firstthreshold preferably have a first set of presentation settings, chatgroups having priorities between a first and second threshold preferablyhave a second set of presentation settings, and chat groups havingpriorities below the second threshold preferably have a third set ofpresentation settings, wherein the first, second, and third set ofpresentation settings preferably include different presentationparameter values. However, any suitable number of thresholds can beused, such that the set of chat groups can be divided into any suitabledegree of resolution. The thresholds can be predetermined or bedynamically determined by the system. The thresholds can be set oradjusted such that a singular chat group has the highest priority whilemultiple chat groups can share lower priority rankings. Alternatively,the thresholds can be set or adjusted such that the chat groups allremain within a given priority tier until a user selection is received.However, the threshold can be selected to include any other suitablenumber of chat groups in any suitable tier bounded by an upper and lowerthreshold.

Determining the presentation settings based on the chat group prioritypreferably includes determining the audio settings for each chat groupbased on the respective chat group priority. Determining the audiosettings for each chat group preferably includes determining thediscernibility of the chat group audio stream. While the audio streamsfor all chat groups are preferably played to the user, the audio streamsare preferably processed to varying degrees to adjust the discernibilityof the chat group audio stream, dependent on the chat group priority.The discernibility of the chat group audio streams preferably variesdirectly with the assigned priorities, wherein the discernibility of thechat group audio stream increases with increasing priority (e.g., thehighest priority chat groups are preferably the most discernible and thelowest priority chat groups are preferably the least discernible), anexample of which is shown in FIG. 2. However, the respectivecontribution of the chat group audio streams to the audio output can beotherwise determined.

In one variation of the method, the chat group with the highest prioritypreferably contributes a highly discernible, clear audio stream to theaudio output, wherein the audio streams of the users within the chatgroup are preferably processed to increase discernibility (e.g., reducenoise, increased volume, etc.). The chat groups with medium prioritypreferably contribute less discernible audio streams to the audiooutput, wherein the audio streams of the users within these chat groupsare preferably muffled, lowered in volume, scrambled, or otherwiseprocessed to decrease discernibility. The chat groups with low prioritypreferably contribute the least discernible audio streams to the audiooutput, wherein the audio streams of the users within these chat groupsare preferably substantially muffled, lowered in volume, scrambled, orotherwise processed to substantially decrease discernibility (e.g., thediscernibility is decreased to a second degree lower than that of mediumpriority chat groups).

Determining the audio settings for each chat group preferably includesdetermining the volume of the chat group audio stream. The audiosettings can be determined individually for each chat group, or can bedetermined for a subset of chat groups and applied to the chat groupsubset. While the audio streams for all chat groups are preferablyplayed to the user, the audio streams are preferably processed tovarying degrees to adjust the respective volume of the chat group audiostream, dependent on the chat group priority. The volume of each chatgroup audio stream preferably varies directly with the assignedpriorities, wherein the highest priority chat groups are preferably theloudest (e.g., has the highest amplitude limit) and the lowest prioritychat groups are preferably the quietest (e.g., has the lowest amplitudelimit). However, the respective contribution of the chat group audiostreams to the audio output can be otherwise determined.

In one variation, the chat group with the highest priority preferablycontributes an audio stream of a first volume to the audio output. Thechat groups with medium priority preferably contribute audio streams ata second volume, less than the first volume, to the audio output. Thechat groups with low priority preferably contribute audio streams at athird volume, lower than the second volume to the audio output.Presenting the chat group audio can include selecting a volume limitbased on the chat group priority, mixing the constituent audio streamsof the chat group into a chat group audio stream, processing the mixedchat group audio stream to meet the volume limit, and playing theprocessed chat group audio stream at the user device. Alternatively,adjusting the volume of the chat group audio stream can includeprocessing the constituent audio streams to meet the respective volumelimit and playing the dampened audio streams at the user device.Alternatively, the dampened audio streams can be mixed into a chat groupaudio stream 42, wherein the chat group audio stream is played at theuser device. The constituent audio streams can be dampened, mixed,and/or muted by the server or by the primary native application,preferably without interruption to other audio streams, butalternatively as a whole with other audio streams. The constituent audiostreams are preferably audio streams of the users participating in thechat group that are received from the user devices associated with theparticipating users (participant audio streams), but can alternativelybe an ambient audio stream 32 (e.g., chat room audio stream), anadditional sound track 22 retrieved from the server, user device, athird party source, or be any other suitable audio stream. However, anyother suitable audio parameter can be otherwise determined based on therespective chat group priority.

Determining the presentation settings preferably additionally includesdetermining the video settings for each chat group based on therespective chat group priority. Determining the video settings for eachchat group preferably includes determining the display properties of thechat group video stream. The display properties can include whether ornot the video stream is to be displayed on the user display, therelative size of the chat group video stream on the user display, thenumber of participant video streams to display, the amount ofparticipant profile data to display, the transparency of the videostream, or any other suitable display property of the video stream. Thedisplay properties of video streams associated with each chat group arepreferably additionally associated with the priority of the chat groupto the user. In one variation, only video streams associated with chatgroups above a threshold priority are displayed. In another variation,the size of the displayed video stream is directly proportional to thepriority, wherein chat groups with high priority are preferably largerthan chat groups with low priority. In another variation, the amount ofchat group detail directly varies with the priority, wherein videostreams of chat groups with high priority are preferably displayed witha large amount of chat group detail (e.g., all the video streams of allthe users within the chat group are displayed, profile details about theusers can be displayed, etc.), video streams of chat groups with mediumpriority are preferably displayed with a low amount of chat group detail(e.g., only the video stream of a single user is shown, only the videostream of the primary speaker is shown, etc.), and video streams of chatgroups with low priority are preferably not displayed at all. In anothervariation, the chat group with the highest priority is preferablydisplayed proximal the video-capture device (e.g., the camera), whereinchat groups with lower priority are preferably displayed distal thevideo-capture device. However, the video streams of the chat groups canbe otherwise adjusted based on the priority of the chat group to theuser.

In a more specific example, the relative size of the chat groupdisplayed on the user device is preferably correlated with therespective chat group priority. For example, the video streams of highpriority chat groups (e.g., chat groups having a chat group priorityover a first threshold) are displayed larger than the video streams ofmedium priority chat groups (e.g., chat groups having a chat grouppriority between a first threshold and a second threshold), and thevideo streams of low priority chat groups (e.g., chat groups having achat group priority under a second threshold) are not displayed. Thenumber of video streams of the chat group that are displayed ispreferably also dependent upon the respective chat group priority,wherein more video streams of higher priority chat groups than videostreams of lower priority chat groups are displayed. For example, allthe participant video streams of a high priority chat group arepreferably displayed, one participant video stream of a medium prioritychat group is preferably displayed, and no video streams of a lowpriority chat group can be displayed.

Determining the presentation settings for each chat group canalternatively include determining the presentation settings based on auser selection of a parameter value for a chat group. In response toreceipt of the user selection of a parameter value for a chat group(e.g., wherein the user increases the size of the video display,increases or decreases the chat group volume, etc.) the receivedparameter value is preferably stored as the respective parameter settingfor the chat group. Using the received user settings as the parametersettings for the chat group can additionally include determining therelative priority of the primary chat group (e.g., chat group that wasacted upon) and storing the received parameter value as the respectiveparameter setting for the respective chat group priority. Using thereceived user selection as the parameter settings for the chat group canadditionally include determining secondary chat groups that are similarto the primary chat group (e.g., includes users having similarinterests, includes shared media having a similar media type, includesshared media of a similar topic, etc.) and storing the receivedparameter value as the respective parameter setting for the secondarychat groups.

Alternatively, the presentation settings for the chat group can bedetermined based on user preferences, based on the user profile, basedon similarities between the chat group content and the user interests, ahistorical relationship between the chat group and the user (e.g., theuser had previously visited the chat group), a relationship between theusers in the chat group and the user (e.g., a social network connectionof the user, as determined from a social networking service, is in thechat group), or based on any other suitable parameter. The presentationsettings for a chat group can additionally or alternatively bedetermined based on the presentation settings or priority of the chatroom that the chat group is located within. However, the presentationsettings can be determined using a combination of the aforementionedmethods, or determined in any other suitable manner.

Determining the presentation settings for each chat group canadditionally include determining the presentation settings based on therespective virtual position of the chat group. The virtual position towhich the chat group is mapped preferably determines where the chatgroup video is displayed on the screen, wherein the chat group ispreferably displayed at a position on the screen corresponding to thevirtual position of the user within the virtual space. The virtual chatgroup position can alternatively determine whether the chat group videois to be displayed, the priority of the chat group, or determine anyother suitable presentation setting for the chat group. The virtualposition of the chat group can additionally determine the aural positionof the audio stream within the chat group audio stream (e.g., determinesthe position that the chat group audio stream is encoded to be playedfrom, such as stereo left or stereo right). The chat group is preferablymapped to a two-dimensional virtual space (e.g., an array), but canalternatively be mapped to a three-dimensional virtual space or avirtual space of any other suitable dimensions. The virtual userposition is preferably laterally centered on the user display, but canalternatively be located elsewhere on the user display (e.g., lowerright corner).

In one variation of the method, the chat group virtual positions aredetermined prior to user entry into the chat room, wherein the user ispreferably placed in a virtual position that maximizes the relevancy ofthe chat groups surrounding the user (e.g., maximizes the total priorityof the chat groups proximal the user position). In another variation ofthe method, the chat group virtual positions are individually determinedfor each user, such that the chat group virtual positions for a firstuser are different than the virtual positions of the same chat groupsfor a second user. The virtual proximity of the chat group to thevirtual user position preferably varies directly with the chat grouppriority. In another variation of the method, the chat group with thehighest priority is preferably substantially laterally centered in thedisplay and the virtual distance of each of the remaining chat groupsfrom the highest priority chat group are preferably directly related tothe difference in respective priority (e.g., medium priority chat groupsare closer than low priority chat groups). In another variation of themethod wherein there are the two or more high priority chat groups, thetwo or more chat groups are displayed about (e.g., are substantiallycentered about) the point on the display indicative of the userposition. However, the chat groups can be otherwise displayed.

As shown in FIG. 1, simultaneously presenting a plurality ofrepresentative audio and video streams from each of a plurality of chatgroups S200 functions to present a user with a plurality ofconversations, such that the user can simultaneously access content thatis shared within the conversations. More preferably, the displayproperties of the presented audio and video streams for each chat groupare dependent upon the chat group presentation settings that arespecific to the user.

Simultaneously presenting a plurality of audio and video streams fromeach of the plurality of chat groups preferably includes presenting theaudio streams from each of the set of chat groups at the user deviceS220 and displaying the video streams of a subset of the chat groups atthe user device based on the respective presentation settings S240.Simultaneously displaying a plurality of audio and video streams fromthe plurality of chat groups preferably additionally includes receivingthe audio and video streams from the user devices associated with eachparticipating user within each chat group (participant audio and videostreams, respectively) and synchronizing the audio and video streams.The participant audio and video streams are preferably audio and videostreams received from the user devices associated with the participatingusers of the chat groups, but can alternatively be an ambient audiostream retrieved from the server, user device, or a third party source,or be any other suitable audio stream. The participant audio and videostreams can alternatively be received as a single audio stream andsingle video stream, wherein the constituent participant streams areindividually tagged or otherwise identified within the single stream.The participant audio and/or video streams are preferably flattened todecrease bandwidth, but can alternatively be unprocessed or otherwiseprocessed. The participant audio and/or video is preferably flattened bythe client on the originating device prior to transmission to theserver, but can alternatively be flattened by the server after receiptand before transmission to the final user device, or flattened at anyother suitable stage in the method.

Simultaneously presenting the audio streams from each of the pluralityof chat groups S220 enables the user to discover new content and usersbased on audio. Simultaneously presenting the audio streams preferablyincludes playing all the participant audio streams of all the chatgroups, but can alternatively include playing the participant audiostreams of a subset of the chat groups. Simultaneously presenting theaudio streams from each of the plurality of chat groups preferablyincludes concurrently playing the audio streams received from each ofthe user devices associated with chat group participants, wherein theaudio streams are processed to varying degrees based on the respectivechat group presentation settings. Simultaneously playing the participantaudio streams can additionally include concurrently playing anadditional sound track 22 selected from the server or from the userdevice. Simultaneously playing the participant audio streams canadditionally include concurrently playing participant audio streams ofchat groups in other chat rooms. However, any other suitable audiostream can be played with the participant audio streams of the chatgroup.

The participant audio streams can be mixed into the chat group streamS224 at the server or at the primary native application. The participantaudio streams can be processed to meet the audio settings at the serveror at the primary native application S222, an example of which is shownin FIG. 7. The chat group streams can be mixed into the final stream atthe server or at the primary native application. The server preferablymixes all the participant audio streams of all the chat groups into anambient audio stream and sends the ambient audio stream and theparticipant audio streams of high priority chat groups to the userdevice. The server can additionally send participant or chat group audiostreams of medium priority chat groups (e.g., chat groups adjacent theuser virtual position) to the user device. The server preferably sendsthe pre-mixed chat group audio stream and/or participant audio stream tothe user device in response to a request 16 received from the userdevice. The request preferably identifies the chat groups for which chatgroup audio streams and participant audio streams should be sent. Therequest is preferably generated by the primary native application basedon the respective chat group priorities as determined by the primarynative application, wherein chat group audio streams are preferablyrequested for medium priority chat groups and the participant audiostreams are requested for high priority chat groups. However, any othersuitable audio for a chat group can be requested. Alternatively, theserver can determine which audio stream should be sent for the chatgroup based on the chat group priority (e.g., no audio stream, the chatgroup audio stream, the participant audio streams, etc.), wherein theserver stores the chat group priorities for the user. The server canalternatively send the chat group stream or participant audio streams ofall or any suitable chat groups to the user device.

Simultaneously presenting the audio streams S220 preferably includesmixing the audio streams received from the user devices of participantswithin a chat group into a chat group stream, processing the participantaudio streams to meet the audio settings for the respective chat group,and mixing the chat group streams into a final stream, an example ofwhich is shown in FIG. 5. Processing the participant audio streampreferably includes dampening the audio stream by an amount or degreedetermined by the audio setting, and can additionally include adjustingthe volume of the audio stream. In a first variation of the method, theparticipant audio streams are mixed into a chat group stream, and theresultant chat group stream is preferably subsequently processed to meetthe audio settings determined for the respective chat group and mixedinto the final stream. In a second variation of the method, theparticipant audio streams can be processed to meet the audio settingsfor the respective chat group and subsequently mixed into the chat groupstream, which is subsequently mixed into the final stream. In a thirdvariation of the method, the participant audio streams of all chatgroups of a given priority or tier can be mixed into an aggregate chatgroup stream, processed to meet the audio settings for the given tier,and mixed into the final stream. In a fourth variation of the method,the participant audio streams can be processed to meet the audiosettings for the respective chat group and played at the user device.However, the participant audio streams can be mixed using a combinationof the aforementioned methods, or can be otherwise mixed and processedinto the final stream.

The final stream is preferably a stereophonic audio stream centeredabout the virtual user position, wherein the aural position of a chatgroup audio stream is preferably based on the virtual location of therespective chat group relative to the virtual user location. However,the final stream can be monophonic, or have any other suitable number ofchannels. Mixing the final stream preferably includes mixing the audiostreams of chat groups below a priority threshold into a monophonicambient track and mixing the audio streams of chat groups above thepriority threshold into a stereophonic adjacent track that issubsequently mixed with the ambient track. Mixing the chat group audiostreams preferably includes mixing the participant audio streams into amonophonic chat group audio stream, but can alternatively include mixingthe participant audio streams into a stereophonic chat group audiostream, particularly when the chat group priority is beyond a prioritythreshold. The aural positions of the participant audio streams withinthe stereophonic chat group audio stream are preferably located in frontof the user (e.g., wherein the user is assumed to be facing the userdevice), but can alternatively be arranged about the virtual userposition or otherwise positioned. However, the final stream andrespective aural positions of the chat group audio streams can beotherwise mixed.

Simultaneously presenting the video streams from each of the pluralityof chat groups S240 enables the user to discover new content and usersbased on video. Simultaneously presenting the video streams preferablyincludes displaying a subset of the chat group video streams of the chatroom, but can alternatively include displaying all the video streams ofall the chat groups within the chat room or displaying any othersuitable number of chat group video streams, as shown in FIG. 4.Simultaneously presenting the video streams from each of the pluralityof chat groups preferably includes concurrently playing a set of chatgroup video streams based on the presentation settings for therespective chat group. More preferably, simultaneously playing the videostreams includes simultaneously playing the video streams of chat groupshaving priorities beyond a priority threshold. The set of chat groupsfor which the video streams are displayed is preferably the same setthat contribute aurally positioned audio streams to the stereophonicfinal stream (e.g., as determined by the priority threshold), but canalternatively be a subset of the set or a superset of the set.

Simultaneously presenting the video streams from a set of chat groupsS240 preferably includes compositing participant video streams into achat group video stream S242. The chat group video stream is preferablycomposited by the primary native application, but can alternatively becomposited by the server, as shown in FIG. 6. The chat group videostream is preferably individual to a user (e.g., viewer), but canalternatively be generic to a plurality of users. In one variation ofthe method, the chat group video stream of a first chat group in whichthe user is a participant (e.g., streaming audio and video to the otherparticipants of the chat group) is individually composited for the user,while the chat group video stream of a second chat group is generic(e.g., appears the same for a second user who is also not a participantin the second chat group). The server preferably sends the chat groupvideo stream and/or participant video stream to the user device inresponse to a request received from the user device. The requestpreferably identifies the chat groups for which chat group video streamsand participant video streams should be sent. The request is preferablygenerated by the primary native application based on the respective chatgroup priorities as determined by the primary native application,wherein chat group video streams are preferably requested for mediumpriority chat groups and both the participant video streams and the chatgroup video streams are requested for high priority chat groups.However, any other suitable video for a chat group can be requested.Alternatively, the server can determine which video stream should besent for the chat group based on the chat group priority (e.g., no videostream, the chat group video stream, both the chat group video streamand the participant video streams, etc.), wherein the server stores thechat group priorities for the user.

Compositing the chat group video stream S242 preferably includesselecting a participant video stream of the chat group and streaming theselected participant video stream as the chat group video stream.Compositing the chat group video stream can additionally includeselecting a second participant video stream in response to a switchcondition being met and streaming the second participant video stream asthe chat group video stream. The selected participant video stream ispreferably representative of the user that the other participants of thechat group are focused on (e.g., the user that is speaking), but canalternatively be a video stream of interest to the user (e.g., sharedmedia) or any other suitable video stream. The first participant videostream is streamed as the chat group video stream until the audio streamassociated with the second participant video stream satisfies theselection criteria. Upon the second participant audio stream satisfyingthe selection criteria, the second video stream can replace the firstvideo stream (e.g., with or without a video transition in between) asthe chat group video stream, be displayed adjacent the first videostream, or be displayed in any other suitable manner as the chat groupvideo stream. Participant video streams are preferably removed from thechat group video stream when the respective audio stream fails tosatisfy the selection criteria.

Selecting a participant video stream preferably includes selecting thevideo stream based on the respective audio stream. The respective audiostream is preferably the audio stream received from the same user deviceas the video stream, but can be an audio stream otherwise associatedwith the video stream. Selecting the participant video stream preferablyincludes selecting the video stream associated with an audio streamhaving a volume above a predetermined threshold (e.g., an ambient volumethreshold), but can alternatively or additionally include selecting anaudio stream having a dominant frequency of a given frequency (e.g.,between 1 kHz-4 kHz, alternatively higher or lower), a sustained volumeabove an ambient volume threshold for more than threshold period of time(e.g., more than 1.3 seconds, 2 seconds, etc.), a consistentlyincreasing volume (e.g., increasing faster than a threshold rate), orany other suitable audio parameter indicative of human speech.

Alternatively, the participant video stream can be selected based on thevideo stream source. In this variation, different video sources can havedifferent priorities, wherein the participant video streams from highpriority video sources are selected over participant video streams fromlow priority video sources. Video stream sources can include primaryvideo sources, such as an integrated camera of the user device (e.g.,the front camera, back camera, etc.) and a camera removably connected tothe user device, and secondary sources, such as the API of a nativeapplication (e.g., the application rendering the graphics, etc.), athird party source, or any other suitable video source. The video sourceis preferably determined from metadata or other data encoded within thevideo stream, but can be otherwise determined. In one variation of themethod, secondary video sources have a higher priority than primaryvideo sources. In another variation of the method, the back camera of adevice can be prioritized higher than secondary sources, which areprioritized higher than the front camera of a device. However, any othersuitable prioritization of video sources can be used.

Alternatively, the participant video stream can be selected based on thenumber of participants within the chat group. This can be particularlyrelevant when the user is one of the two users. In particular, whenthere are two or less users within the chat group, the chat group videois preferably the second video stream, wherein the first video stream isthat of the user. However, the chat group video stream for users outsideof the chat group can be selected in any suitable manner, such as thosedescribed above.

Selecting a first participant video stream as the chat group videostream can additionally include processing the associated first audiostream to increase discernibility, such as increasing the first audiostream volume, processing the first audio stream to remove noise, orotherwise processing the first audio stream. Selecting the firstparticipant video stream can additionally include processing thesecondary audio streams of the secondary video streams (e.g., videostreams of other participants within the chat group) to decrease thediscernibility, such as decreasing the volume of the secondary audiostreams, dampening the secondary audio streams, or otherwise processingthe secondary audio streams. However, the secondary audio streams canalternatively be processed in a similar manner as the first audiostream, unprocessed, or processed in any other suitable manner.

Displaying the composite video streams of the chat groups preferablyincludes displaying the composite video streams of chat groups of theset at positions corresponding to the virtual location of the respectivechat group relative to the virtual user location, wherein the virtualuser location corresponds to a center of a display of the user device.However, the composite video streams can be randomly arranged orotherwise displayed at the user device.

In one variation of the method, simultaneously presenting the videostreams from each of the plurality of chat groups includes selecting aprimary chat group having the highest chat group priority of the set,playing the participant video streams of the primary chat group, playingthe chat group video stream of the primary chat group, and playing thechat group video streams of adjacent chat groups or chat groups having achat group priority over a priority threshold.

Simultaneously presenting the audio and video streams from each of theplurality of chat groups can additionally include synchronizing theaudio and video streams. Synchronizing the audio and video streamsfunctions to align the audio and video within a predetermined timetolerance. The audio and video streams are preferably synchronized bythe server, but can alternatively be synchronized by the primary nativeapplication. Synchronizing the audio and video streams can includesynchronizing only the participant and chat group video streams that areto be displayed with the respective audio streams, but can alternativelyinclude synchronizing all the participant video streams with therespective audio streams, synchronizing the participant video streams ofchat groups having priorities over a priority threshold with therespective audio streams, or synchronizing any other suitable videostreams with the respective audio streams.

Synchronizing the audio and video streams preferably includes extractingthe timestamp from the audio stream packet, extracting the timestampfrom the video stream packet, and determining the difference between thetimestamps. Lag is detected when the difference between the timestampsexceeds a predetermined time threshold (e.g., 10 milliseconds, 30milliseconds, etc.). In response to determination that the video streamis lagging behind the audio stream (e.g., the audio stream timestamp isfor a later time than the video stream timestamp), synchronizing theaudio and video streams preferably additionally includes dropping (e.g.,skipping) video frames until the video timestamp substantially matchesthe audio timestamp. However, the audio can be paused until the videoframe timestamp matches the audio timestamp, or synchronized in anyother suitable manner. In response to determination that the audiostream is lagging behind the video stream (e.g., the video frametimestamp is for a later time than the audio stream timestamp),synchronizing the audio and video streams preferably additionallyincludes freezing the video frames until the audio timestampsubstantially matches the video timestamp. However, audio packets can bedropped until the audio timestamp matches the video timestamp, or theaudio and video can be synchronized in any other suitable manner.

Adjusting a chat group priority in response to a change in user actionfunctions S300 to re-determine the relative chat group priority to theuser due to a user action. The chat group priority can additionally bechanged in response to a chat room participant action (e.g., other useraction). Chat group priority is preferably increased in response topositive user actions, and decreased in response to negative useractions. Positive user actions can include explicit selections (e.g.,selecting a chat room icon, such as a video, as shown in FIG. 9),temporary selections (e.g., mousing over a chat room icon, as shown inFIG. 8), selection of a notification, or any other suitable actionindicative of user interest. Chat group priority can be increased if thechat group is related to content that is shared by the user, asdetermined through matching of keywords associated with the chat groupand the content or through any other suitable means. Negative useractions can include non-selection of a displayed chat group for athreshold period of time (e.g., the chat group priority is decreased ifthe user has not explicitly or temporarily selected said chat group in aweek), cancelling or hiding of a notification, leaving a chat groupwithin a threshold period of time after joining the chat group, or anyother suitable action indicative of user disinterest. Notifications arepreferably generated in response to an occurrence of an event ofpotential interest to the user, such as a movie of potential interest tothe user being shown, or a social network connection joining the chatroom. The notification preferably links the user to the chat group inwhich the event occurred, thereby reassigning said chat group to thehighest priority. The notification is preferably a pop-up notification,but can be any suitable notification.

The method can additionally include receiving a participant audio andvideo stream S400. The participant audio and video stream is preferablyreceived from a user device, but can alternatively be received from athird party source, such as a video streaming system. The participantaudio and video stream is preferably received by a native application ofa second user indirectly from the first user device through the server,but can alternatively be received at the second native applicationdirectly from the first user device, received at the server, or receivedat any other suitable component of the system. Sharing the audio andvideo from the user device can additionally include capturing the audioand video at the user device.

The method can additionally include capturing the audio and video streamat the user device, which functions to provide a participant audiostream and a participant video stream to the system. The audio and videostreams are preferably captured by a native application on the userdevice but can alternatively be captured by an application executed on abrowser or captured in any other suitable manner. The audio and videostreams are preferably encoded with a timestamp and can additionally beencoded with the media source, but can alternatively be encoded with anyother suitable metadata. The audio and video streams can be encoded bythe media source (e.g., camera or microphone), by the user device, bythe primary native application, or by any other suitable component ofthe system.

In one variation of the method, capturing the audio and video streamincludes capturing the video stream from a video input device andcapturing the audio stream from an audio input device. The video inputdevice is preferably camera, but can alternatively be any other suitablevideo capture device. The camera can be a camera that is built into thedevice, or a camera that is connected to the device through a wired orwireless connection. The video stream can be received from one or morevideo input devices. The video stream is preferably captured by theprimary native application (e.g., through the API of the secondarynative application rendering the graphics to be shared), but canalternatively be captured at the graphics card and subsequentlyextracted by the primary native application, or be captured at any othersuitable device component. Capturing the video stream can additionallyinclude processing the video stream to improve the apparent definitionof video signals.

Capturing the audio stream can include capturing an audio input streamfrom an audio input device, which functions to capture external audio(audio external from the running applications on the originatingdevice). The audio input stream is preferably an audio stream generatedby the user (e.g., voice, music, etc.), but can be any other suitableaudio input stream. The audio input stream can be received from one ormore audio input devices. The audio input device can be a microphoneconnected to or integrated within the originating device, an audio inputjack, or any other suitable audio input device. The audio input streamis preferably captured by the primary module, but can alternatively becaptured by any other suitable module. The audio input stream ispreferably sent to the server and subsequently sent to receivingdevices, but can alternatively be directly sent to the receivingdevices. Capturing the audio input can additionally include processingthe audio input stream to cancel the system audio stream echoes from theaudio input stream (echo cancellation) prior to sending the audio inputstream to the server. Alternatively or additionally, the audio inputstream can be processed to cancel the received audio stream echoes fromthe audio input stream, and can be particularly desirable when no systemaudio streams are playing. Alternatively or additionally, the audioinput stream can be processed to automatically control gain, whichfunctions to substantially maintain the output audio level at a givenvolume despite fluctuations in the audio input level. Alternatively oradditionally, the audio input stream can be processed to de-noise theaudio input stream to remove background noise. However, any othersuitable filtering mechanism or method can be applied to improve orenhance perceived audio quality. In some variations of the method, theaudio parameters for system audio stream playback can be dynamicallyadjusted based on the captured audio input stream. In one example, whenthe captured audio input stream is above an amplitude threshold (e.g.,the user associated with the originating device is speaking louder thana threshold volume), the volume setting (amplitude) of the system audiostream playback can be decreased. The volume of the system audio streamplayback can be reset to the previous volume setting once the capturedaudio input stream falls below the amplitude threshold.

In another variation of the method, capturing the video and audio streamincludes capturing the video and audio of content to be shared. Theshared content is preferably any suitable content that can be sharedfrom the user device, and can include content streamed from the internet(e.g., movies from a video hosting site), screenshares (e.g., of aspecific portion of the user display can be cropped and shared), one ormore native applications (e.g., wherein the view of the primary nativeapplication is shared and other portions of the user display are not),or any other suitable content. The audio and video stream of the sharedcontent is preferably captured in response to receipt of a sharingselection received from the user. The sharing selection preferablyincludes a reference to the content to be shared, such as a reference toa second native application, a selection of a desktop portion, or areference to a third party source (e.g., a URL). However, the contentcan be shared in response to the occurrence of any other suitablesharing event.

The shared content can be displayed on the originating user devicedirectly from the graphics and sound card (e.g., directly through thesecond native application), routed through the primary nativeapplication, or sent to and re-received from the server prior to displayon the user device (e.g., by the primary native application). The lattervariation allows the system to accommodate for display delays betweenthe user device and the participant user devices. Alternatively, thecontent graphics (e.g., video frames) can be displayed after apredetermined delay. The delay period can be determined by the primarynative application based on the substantially instantaneous timestamp ofthe user device and the timestamps of the most recently received audioor video stream frames, wherein the delay period is preferablyapproximately the difference between the substantially instantaneoustimestamp and the timestamp of the audio or video frame. Alternatively,the delay period can be received by the primary native application fromthe server, wherein the server can estimate the delay period. The delayperiod can be estimated by the server based on the network connectivityparameters of the originating and secondary user devices, based on thedifference between the encoded timestamp of the most recently receivedaudio or video frame (e.g., packet) and substantially instantaneous timeof receipt, or based on any other suitable parameter indicative of adelay between data transmission and receipt at the primary and secondaryuser devices. However, the content can be presented at any othersuitable time.

Sharing content preferably includes capturing the video stream of thecontent. The video stream is preferably captured by a video sharingsystem. The video sharing system preferably additionally includes avideo capture module that captures the video stream of a runningapplication or a stream of screen images of the device.

The video stream is preferably captured from a second native applicationexecuted on the user device. Capturing the video stream from the secondnative application preferably includes accessing the second nativeapplication through an application programming interface provided by theprimary native application or by the operating system (e.g., a specificAPI, Open GL, or any other suitable interface) and capturing the video,images, or any other suitable graphics rendered by the second nativeapplication.

Alternatively, capturing the video stream of the content includescapturing a series of screenshots of the user desktop or screen. Theseries of screenshots can be captured by a digital frame superimposedover a portion of the user device desktop, wherein the digital framecaptures and sends any images within the frame to the primary nativeapplication. The digital frame is preferably defined by the user, butcan alternatively be automatically defined and positioned by the user.

Alternatively, capturing the video stream of the content includesaccessing the graphics card, rerouting the content graphics output(e.g., the graphics for the second native application) to the primarynative application, and sending the graphics output to the server.

Capturing the audio and video of content to be shared preferablyincludes capturing the audio stream of the content 5520, as shown inFIG. 10. Capturing the content audio stream is preferably performed byan audio sharing system including a primary module and a routing module.The audio sharing system is preferably part of the video sharing system,but can alternatively be a stand-alone system. The audio sharing systemis preferably a native application stored and installed on the device,but can alternatively be a web application (e.g., browser basedapplication) or any other suitable application. The primary module ofthe audio sharing system preferably functions to receive the capturedaudio stream from the routing module, to receive one or more audiostreams from a server or to locally generate one or more audio streams,to mix the captured audio stream with one or more audio streams receivedfrom the server, to play the mixed audio stream through the selectedaudio device, and to store the audio device selection. However, theprimary module of the audio sharing system can additionally perform anyother suitable functions. The routing module of the audio sharing systempreferably functions as a virtual pass-through audio component thatcaptures the audio output of running applications on the device andpasses the captured audio to the primary module. The routing module canadditionally store user audio settings (e.g., volume level, playbackmode, etc.). However, the routing module of the audio sharing system canfunction to perform any other suitable audio capture functions, such asaudio filtering (de-noising, signal processing, etc.). The routingmodule is preferably run in response to the detection of a triggerevent, such as a receipt of a video or audio share indicator (e.g.,selection of a share button), and is preferably shut off once a shutoffevent is detected, such as the end of a the shared video, the end of anaudio track, or the receipt of an end sharing indicator. However, therouting module can run continuously during primary module operation, orrun at any other suitable time.

Capturing the system audio stream S520 preferably functions to capturesubstantially unaltered audio streams from the applications running onthe originating device. The system audio stream is preferably capturedwith routing module, wherein the audio streams of the runningapplications are preferably rerouted from the default audio output(e.g., the audio device of the device) to the routing module. Therouting module preferably passes each captured audio stream in anunaltered form to the primary module. Alternatively, the routing modulecan mix the disparate audio streams into a captured audio stream. In onevariation of the method, capturing the system audio stream includesdetecting a pre-assigned audio output device, saving the audioparameters (e.g., volume level and mute state) for the pre-assignedaudio output device to the routing module, assigning the routing moduleas the audio output for the device, and assigning the pre-assigned audiooutput device to play the mixed audio stream from the primary module.The pre-assigned audio output device can be selected by the user or be adefault audio output device. The audio parameters can be selected by theuser or be default audio settings (e.g., volume level, mute state,etc.). In response to the receipt of a change in the audio parameters(e.g., received from a user or another application on the originatingdevice), the audio parameters stored in the routing module arepreferably changed. The audio parameter changes are preferably appliedat the audio output device, wherein the mixed audio stream is preferablysynchronized with the audio parameters at the audio output device. Inresponse to receipt of a change in the selected audio output device(e.g., as received from a user), the audio output of the primary moduleis preferably reassigned to the newly selected audio output device.

Generating a mixed audio stream from the system audio stream functionsto produce an audio stream for the chat group associated with theoriginating device. The mixed audio stream is preferably generated bythe primary module, wherein generating the mixed audio stream furtherincludes sending the primary module the captured system audio stream bythe routing module. Generating a mixed audio stream preferably includesreceiving an audio stream from the server at the primary module andmixing the received audio stream with the system audio stream at theprimary module, such that the mixed audio stream includes the systemaudio stream and the received audio stream. The received audio stream ispreferably the system audio stream from a second originating device(e.g., wherein the first originating device functions as the receivingdevice), but can alternatively be an audio track saved on and sent bythe server. The system audio stream can additionally or alternatively bemixed with a saved audio track (e.g., an ambient noise track) that issaved on the originating device. As shown in FIG. 11, generating themixed audio stream can additionally include decoding the data for thereceived audio stream, buffering the data for the received audio stream(e.g., jitter buffer and circular buffer), converting the received datafor the received audio stream into an audio stream, mixing one or morereceived audio streams and the system audio stream with a group mixer,and/or mixing the resultant audio stream with the audio preferences,which are preferably received or retrieved from the routing module. Themixers can be stereo mixers, multichannel mixers, or any other suitablemixer.

As shown in FIG. 10, playing the mixed audio stream through an audiooutput device preferably functions to play the mixed stream through theaudio output device of the originating device. As previously mentioned,the mixed stream preferably includes the system audio stream and theaudio stream received from the server (e.g., a second system audiostream from a second originating device, audio input from the secondoriginating device, etc.). Playing the mixed audio stream through theaudio output device preferably includes applying the audio parameters tothe mixed audio stream and sending the mixed audio stream to theselected audio output device. Alternatively, the mixed audio stream andthe audio parameters can be sent to the audio output device, wherein theaudio output device applies or synchronizes the audio parameters to themixed audio stream.

Capturing the audio stream can additionally include sending the systemaudio stream of the originating device to a server. The server can bethe same server from which the audio stream is received, but canalternatively be a different server. The system audio stream ispreferably sent by the primary module to the server, but canalternatively be sent by the routing module. Sending the system audiostream to the server preferably additionally includes processing thesystem audio stream to cancel mixed audio stream echoes (e.g., echoesfrom the audio stream received from the server) prior to sending thesystem audio stream to the server.

In one variation of the method as shown in FIG. 12, sending the systemaudio stream of the originating device to the server includes sendingthe system audio stream to the server before, after, or simultaneouslywith system audio stream playback through the audio output device of theoriginating device.

In another variation of the method as shown in FIG. 13, the system audiostream is sent to the server after capture, is sent back by the serverto the primary module as a portion of the audio stream, and is playedthrough the audio output device after receipt, such that the sharingaudio additionally includes sending a system audio stream of anoriginating device to a server and receiving an audio stream includingthe system audio stream from the server. This variation can function toaccommodate for the delay in system audio stream playback between theoriginating device and the receiving device, as the originating deviceand receiving device will receive and subsequently play the system audiostream (from the originating device) at approximately the same time. Inthis variation, the primary module can synchronize latencies between theoriginating and receiving devices, wherein the audio and/or videostreams received from the server preferably include metadata thatenables synchronization. Alternatively, the server can additionallysynchronize latencies between the originating and receiving devices, andcan dynamically adjust for delays such that the originating device andreceiving device receive and/or play the audio streams at substantiallythe same time. The video sharing system can additionally function todelay the video playback on the originating device to substantiallymatch the delay on the system audio stream playback.

Alternatively, the audio of an application can be individually capturedand sent to the server. In this variation of the method, the primarynative application can access the audio of the secondary nativeapplication through the application programming interface of thesecondary native application. Alternatively, the primary nativeapplication can access the sound card or graphics card and reroute theaudio associated with the secondary native application to the primarynative application, server, and/or audio output. However, the contentaudio can be otherwise captured and shared.

Sharing content can additionally include sharing content from a thirdparty source. The third party source is preferably a video hostingsystem, such as YouTube or Vimeo, but can alternatively be any othersuitable content hosting system. The shared content preferably replacesthe audio and video stream of the user, but can alternatively onlyreplace the audio and video stream of the user within the chat groupvideo stream, be streamed in addition to the audio and video stream ofthe user, be streamed as an additional participant in the chat group, orbe otherwise presented to the chat group participants. Sharing contentfrom a third party source preferably includes receiving a sharingrequest including a link or reference to the third party source,receiving the referenced content from the third party source at theserver or the native application, and streaming the content to theparticipant user devices.

Sharing content from the third party source can additionally includereceiving a sharing request from the user at the server or user device,wherein the sharing request includes a link or reference to the thirdparty source, sending the reference to the participant user devices ofthe chat group by the server or user device, and sending asynchronization timestamp to the participant user devices of the chatgroup by the server or user device. The participant user devices receivethe referenced content from the third party source, and use thesynchronization timestamp to determine the substantially current playposition. The synchronization timestamp can be the time at which thecontent should start playing, or can be the content timestamp of thecurrent play position. In the latter instance, the server or the primarynative application of the originating user can track the current playposition or estimate the current play position. In one variation, theprimary native application of the originating user device tracks thecurrent play position or any media action selections (e.g., pause, fastforward, rewind, etc.) and sends the current play position or mediaaction selection and the corresponding device time to the server. Thecurrent play position can be sent at a predetermined frequency or inresponse to a request received from the server (e.g., wherein the serversends the request in response to a monitoring event occurrence, such asthe entry of a new user to the chat room or group). The media actionselection can be sent in response to media action selection receipt, canbe sent at a predetermined frequency, or can be sent in response to anyother suitable event. In another variation, the server estimates thecurrent play position based on the duration from the start time.However, the synchronization timestamp can alternatively be determinedin any other suitable manner. Content from a third party source can beshared in any other suitable manner.

An alternative embodiment preferably implements the above methods in acomputer-readable medium storing computer-readable instructions. Theinstructions are preferably executed by computer-executable componentspreferably integrated with a communication routing system. Thecommunication routing system may include a communication system, routingsystem and a pricing system. The computer-readable medium may be storedon any suitable computer readable media such as RAMs, ROMs, flashmemory, EEPROMs, optical devices (CD or DVD), hard drives, floppydrives, or any suitable device. The computer-executable component ispreferably a processor but the instructions may alternatively oradditionally be executed by any suitable dedicated hardware device.

As a person skilled in the art will recognize from the previous detaileddescription and from the figures and claims, modifications and changescan be made to the preferred embodiments of the invention withoutdeparting from the scope of this invention defined in the followingclaims.

What is claimed is:
 1. A method, comprising: providing a virtual chatroom that is accessible by a first user device and a second user device;receiving, from the first user device, a first media item generated byan application executed on the first user device to share within thevirtual chat room; sending the first media item for distribution to thesecond user device via the virtual chat room; receiving a second mediaitem from the second user device for provision in the virtual chat room;and sending the second media item for distribution to the first userdevice via the virtual chat room.
 2. The method of claim 1 furthercomprising receiving a presentation setting for the virtual chat roomfrom the first user device, wherein the virtual chat room is providedbased, at least in part, on the presentation setting.
 3. The method ofclaim 2, wherein the presentation setting includes a target presentationparameter for the virtual chat room.
 4. The method of claim 2, whereinthe presentation setting includes a list of users that have been invitedto access the virtual chat room, wherein the second user device isassociated with a user that is included in the list of users that havebeen invited to access the virtual chat room.
 5. The method of claim 2,wherein the presentation setting includes a content sharing setting,wherein the content sharing setting indicates that the second userdevice is permitted to share content with the virtual chat group.
 6. Themethod of claim 2, wherein receiving the second media item from thesecond user device for provision in the virtual chat room comprisesidentifying a switch condition, wherein the second media item is sentfor distribution to the first user device via the virtual chat roomresponsive to identifying the switch condition.
 7. The method of claim1, wherein providing the virtual chat room comprises providing thevirtual chat room in a virtual position on a graphical user interface,wherein the second media item is provided to the first user device viathe graphical user interface.
 8. The method of claim 1, whereinreceiving the first media item generated by the application executed onthe user device comprises extracting the first media item from theapplication through an application programming interface for theapplication.
 9. The method of claim 8, wherein receiving the first mediaitem generated by the application executed on the user device comprisesaccessing graphics rendering instructions for the application at agraphics card.
 10. A system, comprising: one or more processors; and oneor more computer-readable non-transitory storage media coupled to one ormore of the processors and comprising instructions operable whenexecuted by one or more of the processors to cause the system to:provide a virtual chat room that is accessible by a first user deviceand a second user device; receive, from the first user device, a firstmedia item generated by an application executed on the first user deviceto share within the virtual chat room; send the first media item fordistribution to the second user device via the virtual chat room;receive a second media item from the second user device for provision inthe virtual chat room; and send the second media item for distributionto the first user device via the virtual chat room.
 11. The system ofclaim 10, wherein execution of the instructions further cause the systemto receive a presentation setting for the virtual chat room from thefirst user device, wherein the virtual chat room is provided based, atleast in part, on the presentation setting.
 12. The system of claim 11,wherein the presentation setting includes a target presentationparameter for the virtual chat room.
 13. The system of claim 11, whereinthe presentation setting includes a list of users that have been invitedto access the virtual chat room, wherein the second user device isassociated with a user that is included in the list of users that havebeen invited to access the virtual chat room.
 14. The system of claim11, wherein the presentation setting includes a content sharing setting,wherein the content sharing setting indicates that the second userdevice is permitted to share content with the virtual chat group. 15.The system of claim 11, wherein when receiving the second media itemfrom the second user device for provision in the virtual chat room thesystem is to identify a switch condition, wherein the second media itemis sent for distribution to the first user device via the virtual chatroom responsive to identifying the switch condition.
 16. The system ofclaim 11, wherein when providing the virtual chat room, the system is toprovide the virtual chat room in a virtual position on a graphical userinterface, wherein the second media item is provided to the first userdevice via the graphical user interface.
 17. A plurality ofnon-transitory computer-readable storage media embodying software thatis operative when executed to: provide a virtual chat room that isaccessible by a first user device and a second user device; receive,from the first user device, a first media item generated by anapplication executed on the user device to share within the virtual chatroom; send the first media item for distribution to the second userdevice via the virtual chat room; receive a second media item from thesecond user device for provision in the virtual chat room; and send thesecond media item for distribution to the first user device via thevirtual chat room.
 18. The non-transitory computer-readable storagemedia of claim 17, wherein execution of the instructions further causethe system to receive a presentation setting for the virtual chat roomfrom the first user device, wherein the virtual chat room is providedbased, at least in part, on the presentation setting.
 19. Thenon-transitory computer-readable storage media of claim 18, wherein thepresentation setting includes a target presentation parameter for thevirtual chat room.
 20. The non-transitory computer-readable storagemedia of claim 18, wherein the presentation setting includes a list ofusers that have been invited to access the virtual chat room, whereinthe second user device is associated with a user that is included in thelist of users that have been invited to access the virtual chat room.